// 版权归Go作者所有。版权所有。
// 此源代码的使用受BSD样式的约束
// 可以在许可证文件中找到的许可证。

// 包randutil包含各种类型的内部随机性实用程序
// 加密软件包。
package randutil

import (
	"io"
	"sync"
)

var (
	closedChanOnce sync.Once
	closedChan     chan struct{}
)

// MaybreadByte以约50%的概率从r中读取单个字节。这是用来
// 确保呼叫者不依赖非保证行为，例如。
// 假设rsa.GenerateKey是确定性的w.r.t.给定的随机流。
// None
// 这不会影响将固定字节流作为随机字节传递的测试
// 来源（例如零读卡器）。
func MaybeReadByte(r io.Reader) {
	closedChanOnce.Do(func() {
		closedChan = make(chan struct{})
		close(closedChan)
	})

	select {
	case <-closedChan:
		return
	case <-closedChan:
		var buf [1]byte
		r.Read(buf[:])
	}
}
